public class Test6 {
    //乘积为正数的最长子数组长度
    public int getMaxLen(int[] nums) {
        //这个题目跟前leetcode152乘积最大的子数组是类似的，这里求的是乘积为正数的最长子数组的长度
        //所以我们使用两个dp表分别表示以第i个位置为结尾的所有子数组中乘积为正数和负数的最长子数组的长度
        int n = nums.length;
        int[] f = new int[n+1], g = new int[n+1];
        f[0] = g[0] = 0;
        int ret = 0;
        for (int i = 1; i <= n; i++) {
            if (nums[i-1] > 0) {
                f[i] = f[i-1] + 1;
                g[i] = g[i-1] == 0 ? 0 : g[i-1] + 1;
            }else if (nums[i-1] < 0){
                f[i] = g[i-1] == 0 ? 0 : g[i-1] + 1;
                g[i] = f[i-1] + 1;
            }else {
                f[i] = g[i] = 0;
            }
            ret = Math.max(ret,f[i]);
        }
        return ret;
    }

    public static void main(String[] args) {
        Test6 test6 = new Test6();
        int[] arr = {1,-2,-3,4};
        test6.getMaxLen(arr);
        System.out.println(666);
    }
}
